home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 22 / PCPP #22.iso / Quake2 / q2source_12_11 / utils3 / qe4 / bspfile.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-14  |  7.7 KB  |  359 lines

  1.  
  2.  
  3. // upper design bounds
  4. // leaffaces, leafbrushes, planes, and verts are still bounded by
  5. // 16 bit short limits
  6. #define    MAX_MAP_MODELS        1024
  7. #define    MAX_MAP_BRUSHES        8192
  8. #define    MAX_MAP_ENTITIES    2048
  9. #define    MAX_MAP_PATHS        2048
  10. #define    MAX_MAP_ENTSTRING    0x20000
  11. #define    MAX_MAP_TEXTURES    1024
  12. #define    MAX_MAP_TEXINFO        8192
  13.  
  14. #define    MAX_MAP_PLANES        65536
  15. #define    MAX_MAP_NODES        65536
  16. #define    MAX_MAP_BRUSHSIDES    65536
  17. #define    MAX_MAP_LEAFS        65536
  18. #define    MAX_MAP_VERTS        65536
  19. #define    MAX_MAP_FACES        65536
  20. #define    MAX_MAP_LEAFFACES    65536
  21. #define    MAX_MAP_LEAFBRUSHES 65536
  22. #define    MAX_MAP_PORTALS        65536
  23. #define    MAX_MAP_EDGES        128000
  24. #define    MAX_MAP_SURFEDGES    256000
  25. #define    MAX_MAP_MIPTEX        0x200000
  26. #define    MAX_MAP_LIGHTING    0x200000
  27. #define    MAX_MAP_VISIBILITY    0x100000
  28.  
  29. // key / value pair sizes
  30.  
  31. #define    MAX_KEY        32
  32. #define    MAX_VALUE    1024
  33.  
  34. //=============================================================================
  35.  
  36. #define BSPVERSION    34
  37.  
  38. typedef struct
  39. {
  40.     int        fileofs, filelen;
  41. } lump_t;
  42.  
  43. #define    LUMP_ENTITIES        0
  44. #define    LUMP_PLANES            1
  45. #define    LUMP_TEXTURES        2
  46. #define    LUMP_VERTEXES        3
  47. #define    LUMP_VISIBILITY        4
  48. #define    LUMP_NODES            5
  49. #define    LUMP_TEXINFO        6
  50. #define    LUMP_FACES            7
  51. #define    LUMP_LIGHTING        8
  52. #define    LUMP_LEAFS            9
  53. #define    LUMP_LEAFFACES        10
  54. #define    LUMP_LEAFBRUSHES    11
  55. #define    LUMP_EDGES            12
  56. #define    LUMP_SURFEDGES        13
  57. #define    LUMP_MODELS            14
  58. #define    LUMP_PATHS            15
  59. #define    LUMP_BRUSHES        16
  60. #define    LUMP_BRUSHSIDES        17
  61. #define    LUMP_POP            18
  62.  
  63. #define    HEADER_LUMPS    18
  64.  
  65. typedef struct
  66. {
  67.     int            version;    
  68.     lump_t        lumps[HEADER_LUMPS];
  69. } dheader_t;
  70.  
  71. typedef struct
  72. {
  73.     float        mins[3], maxs[3];
  74.     float        origin[3];        // for sounds or lights
  75.     int            headnode;
  76.     int            visleafs;        // not including the solid leaf 0
  77.     int            firstface, numfaces;
  78. } dmodel_t;
  79.  
  80. typedef struct
  81. {
  82.     int            nummiptex;
  83.     int            dataofs[4];        // [nummiptex]
  84. } dmiptexlump_t;
  85.  
  86. #define    MIPLEVELS    4
  87. typedef struct miptex_s
  88. {
  89.     char        name[16];
  90.     unsigned    width, height;
  91.     unsigned    offsets[MIPLEVELS];        // four mip maps stored
  92.     int            flags;
  93.     int            value;
  94. } miptex_t;
  95.  
  96.  
  97. typedef struct
  98. {
  99.     float    point[3];
  100. } dvertex_t;
  101.  
  102.  
  103. // 0-2 are axial planes
  104. #define    PLANE_X            0
  105. #define    PLANE_Y            1
  106. #define    PLANE_Z            2
  107.  
  108. // 3-5 are non-axial planes snapped to the nearest
  109. #define    PLANE_ANYX        3
  110. #define    PLANE_ANYY        4
  111. #define    PLANE_ANYZ        5
  112.  
  113. // planes (x&~1) and (x&~1)+1 are allways opposites
  114.  
  115. typedef struct
  116. {
  117.     float    normal[3];
  118.     float    dist;
  119.     int        type;        // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
  120. } dplane_t;
  121.  
  122.  
  123. // contents flags are seperate bits
  124. // a given brush can contribute multiple content bits
  125. // multiple brushes can be in a single leaf
  126.  
  127. // lower bits are stronger, and will eat weaker brushes completely
  128. #define    CONTENTS_SOLID            1        // an eye is never valid in a solid
  129. #define    CONTENTS_WINDOW            2        // translucent, but not watery
  130. #define    CONTENTS_LAVA            8
  131. #define    CONTENTS_SLIME            16
  132. #define    CONTENTS_WATER            32
  133. #define    CONTENTS_THINWATER        64        // translucent faces
  134.  
  135. #define    LAST_VISIBLE_CONTENTS    64
  136.  
  137. // remaining contents are non-visible, and don't eat brushes
  138. #define    CONTENTS_MONSTER        128
  139. #define    CONTENTS_PLAYERCLIP        256
  140. #define    CONTENTS_MONSTERCLIP    512
  141.  
  142.  
  143. // currents can be added to any other contents, and may be mixed
  144. #define    CONTENTS_CURRENT_0        1024
  145. #define    CONTENTS_CURRENT_90        2048
  146. #define    CONTENTS_CURRENT_180    4096
  147. #define    CONTENTS_CURRENT_270    8192
  148. #define    CONTENTS_CURRENT_UP        16384
  149. #define    CONTENTS_CURRENT_DOWN    32768
  150.  
  151. #define    CONTENTS_ORIGIN            65536        // removed before processing
  152.  
  153.  
  154.  
  155. // !!! if this is changed, it must be changed in asm_i386.h too !!!
  156. typedef struct
  157. {
  158.     int            planenum;
  159.     int            children[2];    // negative numbers are -(leafs+1), not nodes
  160.     short        mins[3];        // for frustom culling
  161.     short        maxs[3];
  162.     unsigned short    firstface;
  163.     unsigned short    numfaces;    // counting both sides
  164. } dnode_t;
  165.  
  166. typedef struct texinfo_s
  167. {
  168.     float        vecs[2][4];        // [s/t][xyz offset]
  169.     int            miptex;
  170.     int            flags;            // miptex flags + overrides
  171.     int            value;            // light emition, etc
  172. } texinfo_t;
  173.  
  174. #define    TEX_SPECIAL        1        // sky or slime, no lightmap or 256 subdivision
  175. #define    SURF_LIGHT        2
  176.  
  177. #define    SURF_WATER        4
  178. #define    SURF_SLIME        8
  179. #define    SURF_LAVA        16
  180. #define    SURF_WINDOW        32
  181.  
  182. #define    SURF_SKY        64
  183. #define    SURF_MIRROR        128
  184.  
  185. #define    SURF_SLIPPERY    256
  186.  
  187. // note that edge 0 is never used, because negative edge nums are used for
  188. // counterclockwise use of the edge in a face
  189. typedef struct
  190. {
  191.     unsigned short    v[2];        // vertex numbers
  192. } dedge_t;
  193.  
  194. #define    MAXLIGHTMAPS    4
  195. typedef struct
  196. {
  197.     unsigned short    planenum;
  198.     short        side;
  199.  
  200.     int            firstedge;        // we must support > 64k edges
  201.     short        numedges;    
  202.     short        texinfo;
  203.  
  204. // lighting info
  205.     byte        styles[MAXLIGHTMAPS];
  206.     int            lightofs;        // start of [numstyles*surfsize] samples
  207. } dface_t;
  208.  
  209. typedef struct
  210. {
  211.     int            contents;            // OR of all brushes
  212.     int            visofs;                // -1 = no visibility info
  213.  
  214.     short        mins[3];            // for frustum culling
  215.     short        maxs[3];
  216.  
  217.     unsigned short        firstleafface;
  218.     unsigned short        numleaffaces;
  219.  
  220.     unsigned short        firstleafbrush;
  221.     unsigned short        numleafbrushes;
  222. } dleaf_t;
  223.  
  224.  
  225. typedef struct
  226. {
  227.     unsigned short    planenum;        // facing out of the leaf
  228.     short    texinfo;
  229. } dbrushside_t;
  230.  
  231. typedef struct
  232. {
  233.     int            firstside;
  234.     int            numsides;
  235.     int            contents;
  236. } dbrush_t;
  237.  
  238. typedef struct
  239. {
  240.     float        origin[3];
  241.     float        angles[3];
  242.     int            next, prev;
  243.     int            flags;
  244.     float        speed;
  245. } dpath_t;
  246.  
  247. //============================================================================
  248.  
  249. #ifndef QUAKE_GAME
  250.  
  251. #define    ANGLE_UP    -1
  252. #define    ANGLE_DOWN    -2
  253.  
  254.  
  255. // the utilities get to be lazy and just use large static arrays
  256.  
  257. extern    int            nummodels;
  258. extern    dmodel_t    dmodels[MAX_MAP_MODELS];
  259.  
  260. extern    int            visdatasize;
  261. extern    byte        dvisdata[MAX_MAP_VISIBILITY];
  262.  
  263. extern    int            lightdatasize;
  264. extern    byte        dlightdata[MAX_MAP_LIGHTING];
  265.  
  266. extern    int            texdatasize;
  267. extern    byte        dtexdata[MAX_MAP_MIPTEX]; // (dmiptexlump_t)
  268.  
  269. extern    int            entdatasize;
  270. extern    char        dentdata[MAX_MAP_ENTSTRING];
  271.  
  272. extern    int            numleafs;
  273. extern    dleaf_t        dleafs[MAX_MAP_LEAFS];
  274.  
  275. extern    int            numplanes;
  276. extern    dplane_t    dplanes[MAX_MAP_PLANES];
  277.  
  278. extern    int            numvertexes;
  279. extern    dvertex_t    dvertexes[MAX_MAP_VERTS];
  280.  
  281. extern    int            numnodes;
  282. extern    dnode_t        dnodes[MAX_MAP_NODES];
  283.  
  284. extern    int            numtexinfo;
  285. extern    texinfo_t    texinfo[MAX_MAP_TEXINFO];
  286.  
  287. extern    int            numfaces;
  288. extern    dface_t        dfaces[MAX_MAP_FACES];
  289.  
  290. extern    int            numedges;
  291. extern    dedge_t        dedges[MAX_MAP_EDGES];
  292.  
  293. extern    int            numleaffaces;
  294. extern    unsigned short    dleaffaces[MAX_MAP_LEAFFACES];
  295.  
  296. extern    int            numleafbrushes;
  297. extern    unsigned short    dleafbrushes[MAX_MAP_LEAFBRUSHES];
  298.  
  299. extern    int            numsurfedges;
  300. extern    int            dsurfedges[MAX_MAP_SURFEDGES];
  301.  
  302. extern    int            numpaths;
  303. extern    dpath_t        dpaths[MAX_MAP_PATHS];
  304.  
  305. extern    int            numbrushes;
  306. extern    dbrush_t    dbrushes[MAX_MAP_BRUSHES];
  307.  
  308. extern    int            numbrushsides;
  309. extern    dbrushside_t    dbrushsides[MAX_MAP_BRUSHSIDES];
  310.  
  311.  
  312. void DecompressVis (byte *in, byte *decompressed);
  313. int CompressVis (byte *vis, byte *dest);
  314.  
  315. void    LoadBSPFile (char *filename);
  316. void    WriteBSPFile (char *filename);
  317. void    PrintBSPFileSizes (void);
  318.  
  319. //===============
  320.  
  321.  
  322. typedef struct epair_s
  323. {
  324.     struct epair_s    *next;
  325.     char    *key;
  326.     char    *value;
  327. } epair_t;
  328.  
  329. typedef struct
  330. {
  331.     vec3_t        origin;
  332.     int            firstbrush;
  333.     int            numbrushes;
  334.     epair_t        *epairs;
  335. } entity_t;
  336.  
  337. extern    int            num_entities;
  338. extern    entity_t    entities[MAX_MAP_ENTITIES];
  339.  
  340. void    ParseEntities (void);
  341. void    UnparseEntities (void);
  342.  
  343. void     SetKeyValue (entity_t *ent, char *key, char *value);
  344. char     *ValueForKey (entity_t *ent, char *key);
  345. // will return "" if not present
  346.  
  347. vec_t    FloatForKey (entity_t *ent, char *key);
  348. void     GetVectorForKey (entity_t *ent, char *key, vec3_t vec);
  349.  
  350. epair_t *ParseEpair (void);
  351.  
  352. void PrintEntity (entity_t *ent);
  353.  
  354. extern    int        r_leaftovis[MAX_MAP_LEAFS];
  355. extern    int        r_vistoleaf[MAX_MAP_LEAFS];
  356. extern    int        r_numvisleafs;
  357.  
  358. #endif
  359.